package cn.bjit.strategy;

import cn.bjit.enums.BizCodeEnum;
import cn.bjit.exception.BizException;
import org.apache.shardingsphere.api.sharding.standard.PreciseShardingAlgorithm;
import org.apache.shardingsphere.api.sharding.standard.PreciseShardingValue;

import java.util.Collection;

public class CustomDBPreciseShardingAlgorithm implements PreciseShardingAlgorithm<String> {
    /**
     *  短链码 ：0A2AEva1  首位0表示库位   1表示表位
     * @param availableTargetNames 数据源集合 ds0 ds1 dsa
     *                             在分库时值为所有分片库的集合 databaseNames
     *                             分表时为对应分片库中所有分片表的集合 tablesNames
     * @param shardingValue        分片属性，包括
     *                             logicTableName 为逻辑表，
     *                             columnName 分片健（字段），
     *                             value 为从 SQL 中解析出的分片健的值
     * @return
     * a
     * 0
     */
    @Override
    public String doSharding(Collection<String> availableTargetNames, PreciseShardingValue<String> shardingValue) {
        //获取锻炼码第一位，即库位 0A2AEva1- 0
        String codePrefix=shardingValue.getValue().substring(0,1);
        //获取库名的最后一位，真实配置ds0 ds1 dsa
        for(String targetName:availableTargetNames){
               String targetNameSuffix=  targetName.substring(targetName.length()-1);
               if(codePrefix.equals(targetNameSuffix)){
                   return targetName;
               }
        }
         throw new BizException(BizCodeEnum.DB_ROUTE_NOT_FOUND);
    }
}
